{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "cell_id": "f6a27e2085c84834892fb19b1abf31c4",
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 664,
    "execution_start": 1660293330892,
    "source_hash": "ee2dcee6",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集大小： 500\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 导入数据集\n",
    "data = np.loadtxt('PCA_dataset.csv', delimiter=',')\n",
    "print('数据集大小：', len(data))\n",
    "\n",
    "# 可视化\n",
    "plt.figure()\n",
    "plt.scatter(data[:, 0], data[:, 1], color='blue', s=10)\n",
    "plt.axis('square')\n",
    "plt.ylim(-2, 8)\n",
    "plt.grid()\n",
    "plt.xlabel(r'$x_1$')\n",
    "plt.ylabel(r'$x_2$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "cell_id": "6f97733b0a20476a91144869e008b297",
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 2,
    "execution_start": 1660293078045,
    "id": "E74EC9FF8CDC4271872000B35DA48AA0",
    "jupyter": {},
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "source_hash": "d4408561",
    "tags": []
   },
   "outputs": [],
   "source": [
    "def pca(X, k):\n",
    "    d, m = X.shape\n",
    "    if d < k:\n",
    "        print('k应该小于特征数')\n",
    "        return X, None\n",
    "\n",
    "    # 中心化\n",
    "    X = X - np.mean(X, axis=0)\n",
    "    # 计算协方差矩阵\n",
    "    cov = X.T @ X\n",
    "    # 计算特征值和特征向量\n",
    "    eig_values, eig_vectors = np.linalg.eig(cov)\n",
    "    # 获取最大的k个特征值的下标\n",
    "    idx = np.argsort(-eig_values)[:k]\n",
    "    # 对应的特征向量\n",
    "    W = eig_vectors[:, idx]\n",
    "    # 降维\n",
    "    X = X @ W\n",
    "    return X, W"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "cell_id": "9330cd1cb3bb414cbc53904bab40eb4a",
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 855,
    "execution_start": 1660293382703,
    "source_hash": "1277cc9c",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "变换矩阵：\n",
      " [[ 0.90322448 -0.42916843]\n",
      " [ 0.42916843  0.90322448]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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DAwMZJ20zP3FX/yFTJkyRU4++WSZPXu2vPPOO1knKVcefvhhufzyy6WhoUHOOOMMWbp0qXz00UdZJyv3Hn74YampqZE1a9ZknZTCINjIyA9+8ANpbW2VO+64Q3784x/LP//zP8vy5cuzTlZutbW1yaRJk7JORi59+OGH8sUXX8imTZvk/fffl29/+9vyl3/5l7Ju3bqsk5apbdu2yZo1a+TBBx+Ud999V66++mpZvHix/OxnP8s6abnx1ltvyerVq6W7u1t27Nghv/rVr2TBggVy9OjRrJOWW7t375annnpKZsyYkXVSisVD1Q0ODnpnn32219nZmXVSCuG1117zLrjgAu/999/3RMR79913s05S7j366KPelClTsk5GpubOnevdddddZd9dcMEF3gMPPJBRivLv0KFDnoh4b731VtZJyaUjR454v/7rv+7t2LHDu/baa71777036yQVBjUbGdi3b598+umnMmbMGLnsssvkrLPOksWLF8v777+fddJy5+c//7nceeedsmXLFhk/fnzWySmM3t5emTBhQtbJyMzAwIDs3btXFixYUPb9ggULZOfOnRmlKv96e3tFREb1uaOzevVqWbJkiVx//fVZJ6VwCDYy8G//9m8iIrJ+/Xr5+te/Lq+88oqcdtppcu2118rnn3+eceryw/M8uf322+Wuu+6SOXPmZJ2cwvj444/liSeekLvuuivrpGTm8OHDcvz4cZk4cWLZ9xMnTpTPPvsso1Tlm+d5cv/998tVV10ll1xySdbJyZ0XXnhB9u3bJw8//HDWSSkkgo0UrV+/XmpqarSfPXv2yBdffCEiIg8++KD83u/9nsyePVueeeYZqampke9///sZ74V7pvn0xBNPSF9fn6xduzbrJGfCNJ+Cenp6ZNGiRXLzzTfLypUrM0p5ftTU1JT92/O8Yd+h5O6775Z//dd/leeffz7rpOTOJ598Ivfee68899xzcvLJJ2ednEIaVa+Yd+3uu++WW265RbvMeeedJ0eOHBERkYsuuujE93V1dXL++eePis5rpvn00EMPSXd397D3EMyZM0duvfVWefbZZ10mM3Om+eTr6emR+fPny5VXXilPPfWU49TlW1NTk4wdO3ZYLcahQ4eG1XZA5J577pG/+7u/k7ffflsmT56cdXJyZ+/evXLo0CGZPXv2ie+OHz8ub7/9tnz3u9+V/v5+GTt2bIYpzD+CjRQ1NTVJU1NT7HKzZ8+Wuro6+eijj+Sqq64SEZHBwUE5ePCgnHvuua6TmTnTfPrOd74jDz300Il/9/T0yMKFC2Xbtm3S0tLiMom5YJpPIiKffvqpzJ8//0Qt2Zgxo7vScty4cTJ79mzZsWOH3HTTTSe+37Fjh/zu7/5uhinLF8/z5J577pEXX3xR3nzzTZkyZUrWScql6667Tn7yk5+UfXfHHXfIBRdcIO3t7QQaBgg2MtDY2Ch33XWXdHR0SHNzs5x77rnyrW99S0REbr755oxTlx/nnHNO2b+/9KUviYjI1KlTefoK6OnpkXnz5sk555wjjz32mPziF7848bczzzwzw5Rl6/7775fW1laZM2fOidqen/3sZ6O6L0vY6tWrZevWrfLyyy9LQ0PDiZqgU089Verr6zNOXX40NDQM68dyyimnyOmnn07/FkMEGxn51re+JSeddJK0trbK//7v/0pLS4v88Ic/lNNOOy3rpKFgtm/fLgcOHJADBw4MC8K8UfxS569+9avy3//93/Inf/In8l//9V9yySWXyGuvvTYqag9NPfnkkyIiMm/evLLvn3nmGbn99turnyCMWLxiHgAAODW6G3YBAIBzBBsAAMApgg0AAOAUwQYAAHCKYAMAADhFsAEAAJwi2AAAAE4RbAAAAKcINgAAgFMEGwAy9fzzz8vJJ58sn3766YnvVq5cKTNmzJDe3t4MUwYgLUxXDiBTnufJzJkz5eqrr5bvfve7smHDBuns7JTu7m45++yzs04egBTwIjYAmaqpqZFvfvOb8vu///syadIk+fM//3N55513TgQaN910k7z55pty3XXXyd/8zd9knFoASVCzASAXZs2aJe+//75s375drr322hPf/+M//qP88pe/lGeffZZgAygo+mwAyNzf//3fy4cffijHjx+XiRMnlv1t/vz50tDQkFHKAKSBYANApvbt2yc333yzbNq0SRYuXCjf+MY3sk4SgJTRZwNAZg4ePChLliyRBx54QFpbW+Wiiy6Syy+/XPbu3SuzZ8/OOnkAUkLNBoBMfP7557J48WL5nd/5HVm3bp2IiMyePVtuvPFGefDBBzNOHYA0UbMBIBMTJkyQDz74YNj3L7/8cgapAeASo1EA5NrChQtl3759cvToUZkwYYK8+OKLcvnll2edLAAWCDYAAIBT9NkAAABOEWwAAACnCDYAAIBTBBsAAMApgg0AAOAUwQYAAHCKYAMAADhFsAEAAJwi2AAAAE4RbAAAAKcINgAAgFMEGwAAwKn/D1TM2nM338pIAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X, W = pca(data, 2)\n",
    "print('变换矩阵：\\n', W)\n",
    "\n",
    "# 绘图\n",
    "plt.figure()\n",
    "plt.scatter(X[:, 0], X[:, 1], color='blue', s=10)\n",
    "plt.axis('square')\n",
    "plt.ylim(-5, 5)\n",
    "plt.grid()\n",
    "plt.xlabel(r'$x_1$')\n",
    "plt.ylabel(r'$x_2$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "cell_id": "9ebd28c5c3824975bc68378a5793d108",
    "deepnote_cell_type": "code",
    "deepnote_to_be_reexecuted": false,
    "execution_millis": 253,
    "execution_start": 1660293646968,
    "id": "5094FD114B51443EACDAB2D0C183285D",
    "jupyter": {},
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "source_hash": "f1a5a4a7",
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sklearn计算的变换矩阵：\n",
      " [[-0.90322448  0.42916843]\n",
      " [-0.42916843 -0.90322448]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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/fXXy0033SStra1ZF6dqvPvuu3LvvffKTTfdlHVRMnPgwAH5+OOP5cQTTyx6/MQTT5QPP/wwo1Llm+d5cuutt8qll14q55xzTtbFyZ1HH31UXnnlFVm/fn3WRcmtX/7yl3L//ffLZz7zGXn22Wflpptukq985SvS3d2dddGUSDZq2Nq1a6Wurk77s2fPHrn33ntlYGBAVq9enXWRM2Eap6C+vj6ZN2+eXHPNNbJ06dKMSp4fdXV1Rb97nlfyGApWrFgh//Ef/yGPPPJI1kXJnffff19uueUW2bp1qxxzzDFZFye3Dh8+LC0tLXLHHXfI+eefL8uWLZMbb7xR7r///qyLpjSqbjE/2qxYsUIWLVqkfc5pp50m69atk97e3pL19VtbW+W6666Thx9+2GUxM2caJ19fX5/MnDlTLrroInnggQccly7fmpubZezYsSWtGPv37y9p7YDIzTffLD/5yU/kxRdflAkTJmRdnNzZu3ev7N+/X6ZNm3bksY8//lhefPFFue+++2RwcFDGjh2bYQnz4eSTT5azzz676LGzzjpL/uVf/iWjEsUj2ahhzc3N0tzcHPu873znO7Ju3bojv/f19cncuXNl+/bt0tbW5rKIuWAaJ5HCdLOZM2fKtGnT5KGHHpIxY0Z34+DRRx8t06ZNk56eHrnqqquOPN7T0yNf/OIXMyxZvnieJzfffLM8/vjj8vzzz8ukSZOyLlIuzZo1S1577bWix2644QaZMmWKdHR0kGj8f5dccknJ1Ol33nlHPv3pT2dUongkG5BTTz216PdPfOITIiJyxhlncPUV0NfXJzNmzJBTTz1V7r77bvntb3975G8nnXRShiXL1q233irt7e3S2tp6pLXnV7/61ageyxK2fPly2bZtm/z4xz+WxsbGIy1Bn/zkJ2XcuHEZly4/GhsbS8axHHvssXL88cczviXgq1/9qlx88cVyxx13yN/8zd/Iyy+/LA888ECuW1pJNgBDO3bskH379sm+fftKkjBvFN88+Utf+pL87//+r3zjG9+Q//mf/5FzzjlHnnrqqVxfZVWa35c+Y8aMoscfeughuf766ytfIFS1Cy64QB5//HFZvXq1fOMb35BJkybJPffcI9ddd13WRVPiFvMAAMCp0d3hDAAAnCPZAAAATpFsAAAAp0g2AACAUyQbAADAKZINAADgFMkGAABwimQDAAA4RbIBAACcItkAkKlHHnlEjjnmGPnggw+OPLZ06VI599xzpb+/P8OSAUgLy5UDyJTneTJ16lT5/Oc/L/fdd590dXXJpk2bpLe3Vz71qU9lXTwAKeBGbAAyVVdXJ9/61rfkr//6r+WUU06Rf/qnf5KXXnrpSKJx1VVXyfPPPy+zZs2SH/3oRxmXFkAStGwAyIWWlhZ54403ZMeOHXL55Zcfefzf/u3f5Pe//708/PDDJBtAlWLMBoDMPfvss/LWW2/Jxx9/LCeeeGLR32bOnCmNjY0ZlQxAGkg2AGTqlVdekWuuuUY2btwoc+fOla9//etZFwlAyhizASAz7733nixYsEBuu+02aW9vl7PPPlsuuOAC2bt3r0ybNi3r4gFICS0bADLxu9/9TubPny9/+Zd/KWvWrBERkWnTpsmVV14pt99+e8alA5AmWjYAZOK4446T//zP/yx5/Mc//nEGpQHgErNRAOTa3Llz5ZVXXpGPPvpIjjvuOHn88cflggsuyLpYACyQbAAAAKcYswEAAJwi2QAAAE6RbAAAAKdINgAAgFMkGwAAwCmSDQAA4BTJBgAAcIpkAwAAOEWyAQAAnCLZAAAATpFsAAAAp0g2AACAU/8Pjme2QFAw5kcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "\n",
    "# 中心化\n",
    "X = data - np.mean(data, axis=0)\n",
    "pca_res = PCA(n_components=2).fit(X)\n",
    "W = pca_res.components_.T\n",
    "print ('sklearn计算的变换矩阵：\\n', W)\n",
    "X_pca = X @ W\n",
    "\n",
    "# 绘图\n",
    "plt.figure()\n",
    "plt.scatter(X_pca[:, 0], X_pca[:, 1], color='blue', s=10)\n",
    "plt.axis('square')\n",
    "plt.ylim(-5, 5)\n",
    "plt.grid()\n",
    "plt.xlabel(r'$x_1$')\n",
    "plt.ylabel(r'$x_2$')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "deepnote": {},
  "deepnote_execution_queue": [],
  "deepnote_notebook_id": "1c69d9d8957b4e07a2c94ce4117cb5c4",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
